﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace STX.Lib.Logging
{
    public enum LogLevel
    {
        Debug = 10,
        Information = 20,
        Warning = 30,
        Error = 40,
        Fatal = 50
    }

    /// <summary>
    /// Logger interface
    /// </summary>
    public partial interface ILogger
    {
        bool IsEnabled(LogLevel level);

        ///// <summary>
        ///// Deletes a log item
        ///// </summary>
        ///// <param name="log">Log item</param>
        //void DeleteLog(Log log);

        ///// <summary>
        ///// Clears a log
        ///// </summary>
        //void ClearLog();

        ///// <summary>
        ///// Gets all log items
        ///// </summary>
        ///// <param name="fromUtc">Log item creation from; null to load all records</param>
        ///// <param name="toUtc">Log item creation to; null to load all records</param>
        ///// <param name="message">Message</param>
        ///// <param name="logLevel">Log level; null to load all records</param>
        ///// <param name="pageIndex">Page index</param>
        ///// <param name="pageSize">Page size</param>
        ///// <returns>Log item collection</returns>
        //IPagedList<Log> GetAllLogs(DateTime? fromUtc, DateTime? toUtc,
        //    string message, LogLevel? logLevel, int pageIndex, int pageSize);

        ///// <summary>
        ///// Gets a log item
        ///// </summary>
        ///// <param name="logId">Log item identifier</param>
        ///// <returns>Log item</returns>
        //Log GetLogById(int logId);

        ///// <summary>
        ///// Get log items by identifiers
        ///// </summary>
        ///// <param name="logIds">Log item identifiers</param>
        ///// <returns>Log items</returns>
        //IList<Log> GetLogByIds(int[] logIds);

        ///// <summary>
        ///// Inserts a log item
        ///// </summary>
        ///// <param name="logLevel">Log level</param>
        ///// <param name="shortMessage">The short message</param>
        ///// <param name="fullMessage">The full message</param>
        ///// <param name="customer">The customer to associate log record with</param>
        ///// <returns>A log item</returns>
        //Log InsertLog(LogLevel logLevel, string shortMessage, string fullMessage = "", Customer customer = null);
    }
}
